package com.power.visual;

import com.power.utils.StringUtil;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.Timer;

/**
 * Janela temporária para exibição de mensagens.
 * O tempo de duração padrão da exibição é
 * de 2,5 segundos. É setada como
 * diálogo modal por padrão.
 * @author f6036477
 */
public class TempDialog 
    extends javax.swing.JDialog
    implements ActionListener
{

    /** Creates new form TempDialog */
    public TempDialog(Window owner) {
        super(owner);
        initComponents();
        this.setModal(true);
        time = DEFAULT_TIME;
        timer = new Timer(time, this);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  private void initComponents() {

    labelAguarde = new javax.swing.JLabel();
    runningLabel = new com.power.visual.RunningLabel();
    separator1 = new javax.swing.JSeparator();
    labelTexto = new javax.swing.JLabel();

    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    setIconImage(new ImageIcon(this.getClass().
      getResource("running-circle[256].png")).getImage());
  setModal(true);
  setResizable(false);

  labelAguarde.setFont(new java.awt.Font("Bitstream Vera Sans", 1, 14));
  labelAguarde.setText("Aguarde ...");

  labelTexto.setFont(new java.awt.Font("Bitstream Vera Sans", Font.BOLD, 14));
  labelTexto.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
  labelTexto.setText("Mensagem!");

  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  getContentPane().setLayout(layout);
  layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
          .addContainerGap()
          .addComponent(labelTexto, javax.swing.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE))
        .addGroup(layout.createSequentialGroup()
          .addContainerGap()
          .addComponent(separator1, javax.swing.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE)))
      .addContainerGap())
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      .addContainerGap(91, Short.MAX_VALUE)
      .addComponent(labelAguarde)
      .addGap(18, 18, 18)
      .addComponent(runningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addGap(81, 81, 81))
  );
  layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
      .addContainerGap()
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
        .addComponent(labelAguarde, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addComponent(runningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
      .addGap(11, 11, 11)
      .addComponent(separator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
      .addComponent(labelTexto, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  );

  pack();
  }// </editor-fold>//GEN-END:initComponents

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TempDialog(null).setVisible(true);
            }
        });
    }

  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JLabel labelAguarde;
  private javax.swing.JLabel labelTexto;
  private com.power.visual.RunningLabel runningLabel;
  private javax.swing.JSeparator separator1;
  // End of variables declaration//GEN-END:variables
  private Timer timer;
  /**
   * Tempo padrão de duração da janela.
   */
  public static final int DEFAULT_TIME = 2000;
  private int time;

  
  /**
   * Retorna o tempo de exibição de
   * TempDialog, em milisegundos.
   * @return milisegundos.
   */
  public int getTime() {
    return time;
  }

  /**
   * Seta o tempo de duração da exibição
   * de TempDialog.
   * @param time milisegundos.
   */
  public void setTime(int time) {
    this.time = time;
    timer.setInitialDelay(time);
  }

  /**
   * Fecha TempDialog.
   * @param e
   */
  @Override
  public void actionPerformed(ActionEvent e) {
    this.stop();
  }

  /**
   * Seta o texto a ser exibido.
   * @param text Texto.
   */
  public void setText(String text)
  {
    if(text == null) return;

    String ntext = "<html>";
    ntext += text;
    ntext += "</html>";
    ntext = new StringUtil(ntext).replaceAll("\n", "<br>");
    labelTexto.setText(ntext);
  }

  /**
   * Mensagem exibida como título
   * do diálogo, ao lado do ícone
   * (Texto padrão: \"Aguarde ...\").
   * @param text Mensagem ao lado do ícone.
   */
  public void setRunningText(String text)
  {
    this.labelAguarde.setText(text);
  }

  /**
   * Retorna a mensagem exibida como título
   * do diálogo, ao lado do ícone
   * (Texto padrão: \"Aguarde ...\").
   * @return Mensagem ao lado do ícone.
   */
  public String getRunningText()
  {
    return labelAguarde.getText();
  }

  /**
   * Retorna o texto a ser exibido.
   * @return Texto exibido.
   */
  public String getText()
  {
    String text = labelTexto.getText();
    text.replaceAll("<html>", "");
    text.replaceAll("</html>", "");
    text.replaceAll("<br>", "\n");
    return text;
  }

  /**
   * Mostra TempDialog.
   */
  public void start()
  {
    if(time > 0)
      timer.start();
    
    this.centerOnScreen();
    this.setVisible(true);
  }

  /**
   * Pára e fecha TempDialog.
   */
  public void stop() {
    if(timer.isRunning())
      timer.stop();
    this.setVisible(false);
    this.dispose();
  }

  /**
   * Centraliza a janela na tela
   */
  private void centerOnScreen()
  {
    int x =
        (int) (Toolkit
        .getDefaultToolkit()
        .getScreenSize()
        .getWidth() / 2) - this.getWidth() / 2;
    int y =
        (int) (Toolkit
        .getDefaultToolkit()
        .getScreenSize()
        .getHeight() / 2) - this.getHeight() / 2;
    this.setLocation(x, y);
  }


}
